package com.yc.thread.basic;

/**
 * 将多个线程加入到一个线程组  然后进行管理
 * @author zwei
 * @create 2024-07-15 10:22
 */
public class Test14_threadgroup {
    public static void main(String[] args) {
        //创建任务对象
        TestThread task1=new TestThread();
        TestThread task2=new TestThread();

        ThreadGroup threadGroup=new ThreadGroup("新建线程组1");
        //创建两个线程  与两个任务绑定
        Thread t1=new Thread(threadGroup,task1,"t1");
        Thread t2=new Thread(threadGroup,task2,"t2");
        t1.start();
        t2.start();
        //通过线程组管理线程
        System.out.println("活动的线程组个数："+threadGroup.activeCount());
        System.out.println("线程组的名称为："+threadGroup.getName());
        //线程组中断 则这个组中所有的线程全部中断
        threadGroup.interrupt();       //如果不中断  将回一直执行
    }
}
class TestThread implements Runnable{
    @Override
    public void run() {
        while (!Thread.currentThread().isInterrupted()){       //发出中断信号  interrupt()
            try {
                System.out.println("线程名:"+Thread.currentThread().getName());    //如果没有中断信号 每睡三秒  又重新执行
                Thread.sleep(3000);         //线程睡眠时中断线程会抛出异常
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
